Pytorch 中的 Tensor , Variable和Parameter 您所在的位置:网站首页 pytorch parameters与variable Pytorch 中的 Tensor , Variable和Parameter

Pytorch 中的 Tensor , Variable和Parameter

2023-09-08 20:03| 来源: 网络整理| 查看: 265

Pytorch 中的 Tensor , Variable和Parameter 1. Tensor2. Variable3. Parameter 原文地址: https://www.jianshu.com/p/cb739922ce88

1. Tensor

pytorch中的Tensor类似于numpy中的array,使用Tensor是因为tensor能够更方便地在GPU上进行运算。pytorch为tensor设计了许多方便的操作,同时tensor也可以轻松地和numpy数组进行相互转换。

2. Variable

Variable是对Tensor的封装,操作与tensor基本一致,不同的是,每一个Variable被构建的时候,都包含三个属性:

Variable中所包含的tensor tensor的梯度 .grad 以何种方式得到这种梯度 .grad_fn 之所以有Variable这个数据结构,是为了引入计算图(自动求导),方便构建神经网络。

通过调用backward(),我们可以对某个Variable行一次自动求导,但如果我们再对这个Variable进行一次backward()操作,会发现程序报错。这是因为:

PyTorch默认做完一次自动求导后,就把计算图丢弃了。我们可以通过设置retain_graph来实现多次求导。 3. Parameter

网络中存在很多参数,这些参数需要在网络训练的过程中实时更新(一个batch更新一次),Variable默认是不需要求梯度的,需要手动设置参数 requires_grad=True,Variable因为要多次反向传播,那么在bcakward的时候还要手动注明参数,如w.backward(retain_graph=True),Pytorch主要通过引入nn.Parameter类型的变量和optimizer机制来解决了这个问题。Parameter是Variable的子类,本质上和后者一样,只不过parameter默认是求梯度的,同时一个网络net中的parameter变量是可以通过 net.parameters() 来很方便地访问到的,只需将网络中所有需要训练更新的参数定义为Parameter类型,再佐以optimizer,就能够完成所有参数的更新了,具体如下:

class Net(Module): def __init__(self, a, b, ...): super(net, self).__init__() self... # parameters self... # layers def forward(self): x = ... x = ... # 数据流 return x net = Net(a, b, ...) net.train() ... optimizer = torch.optim.SGD(net.parameters(), lr=1e-1) # 然后在每一个batch中,调用optimizer.step()即可完成参数更新了(loss.backward()之后)


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有